package leetcode12;

import java.util.Stack;

/**
 * 20. 有效的括号
 */
public class test65 {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        boolean flag = false;
        char[] str = s.toCharArray();

        for (int i = 0; i < str.length; i++) {
            if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
                stack.add(str[i]);
            } else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
                // 检查栈是否为空，防止 pop() 时发生错误
                if (stack.isEmpty()) {
                    return false;
                }
                // 修改这里的变量名称，避免与参数名冲突
                char top = stack.pop();
                flag = isMatchingPair(top, str[i]);
                // 如果匹配失败，直接返回 false
                if (!flag) {
                    return false;
                }
            }
        }

        // 最后检查栈是否为空，如果不为空，说明有多余的左括号
        return stack.isEmpty();
    }

    // 修改函数名称为更明确的 isMatchingPair
    public boolean isMatchingPair(char s, char a) {
        if (s == '(' && a == ')') {
            return true;
        }
        if (s == '[' && a == ']') {
            return true;
        }
        if (s == '{' && a == '}') {
            return true;
        }
        return false;
    }
}
